#include <iostream>
#include <stdio.h>
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
        }
};

class Solution {
public:
  static   ListNode* ReverseList(ListNode* pHead) {
      if(pHead==NULL)
      {
          return NULL;
      }

      ListNode * cur=pHead;
      ListNode *pre=NULL;
      ListNode *next=pHead->next;
      while(next!=NULL)
      {
        cur->next=pre;
        pre=cur;
        cur=next;

        next=cur->next;
      }
      cur->next=pre;
      pre=cur;
      return pre;
    }
};

void test()
{
    ListNode * pos_1=new ListNode(1);
    ListNode * pos_2=new ListNode(2);
    ListNode * pos_3=new ListNode(3);
    ListNode * pos_4=new ListNode(4);
    ListNode * pos_5=new ListNode(5);
    ListNode * pos_6=new ListNode(6);

    pos_1->next=pos_2;
    pos_2->next=pos_3;
    pos_3->next=pos_4;
    pos_4->next=pos_5;
    pos_5->next=pos_6;

    ListNode * ret=Solution ::ReverseList(pos_1);    
    while(ret!=NULL)
    {
        printf("%d ",ret->val);
        ret=ret->next;
    }
}
int main()
{
    test();
    return 0;
}
